//
//  main.m
//  C4_一维数组
//
//  Created by dllo on 15/10/9.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
//    int a = 0;
    // 定义一个数组
    // 数组中每个变量(元素/成员)的类型为int
    // 数组的名字arr
    // 数组中每个变量的初值为0
    // 1,注意,arr[常量]    2,数组中的变量都是相同类型
//    int arr[5] = {0};
    
    // 初值的几种形式
//    int arr[5] = {0};
//    int arr1[5] = {1, 2, 3, 4, 5};
//    int arr2[5] = {1, 2, 3};
//    
//    // 注意!!! 定义数组的时候一定要指定好数组中元素个数
//    // 这种初值形式,系统会自动根据初值个去决定数组元素个数
//    int arr3[] = {1, 2, 3, 4, 5};
//    
//    
////    定义一个浮点类型的数组,7个元素,自己给定初值
////    定义一个字符类型的数组,6个元素,自己给定初值
//    
//    float arr4 [7] = {1, 2, 3, 4, 5, 6, 7};
//    char arr5 [6] = {'a', 'b', 'c', 'd', 'e', 'f'};
    
    // 访问数组中的元素
//    int arr[5] = {1, 2, 3, 4, 5};
//    
//    // 给数组中元素赋值
//    // 注意数组中元素的标号从0开始
//    // 2为编号,专业名称叫"下标"
//    arr[2] = 10;
//    
//    // 打印第4个(下标为3)元素的值
//    printf("%d\n", arr[3]);
//    
//    // 注意!!!!!!!越界问题!!!!!!!
//    // 数组下标从0开始,最大编号比定义少1
//    arr[5] = 11;
//    printf("%d\n", arr[5]);
    
//    1、定义一个具有20个元素的整型数组，每个元素的取值范围是30-70之间，求数组元素的和。
//    int arr[20] = {0};
//    int sum = 0;
//    for (int i = 0; i < 20; i++) {
//        
//        // 为每个元素赋值随机数
//        // 注意,访问的时候,数组下标可以是变量
//        //      定义的时候,数组下标只能是常量
//        arr[i] = arc4random()%(70 - 30 + 1) + 30;
//        printf("%d ", arr[i]);
//        
//        // 元素和
//        sum += arr[i];
//    }
//    printf("\nsum = %d", sum);
    
//    int arr[20] = {0};
//    int sum = 0;
//    for (int i = 0; i < 20; i++) {
//        arr[i] = arc4random()%(70 - 30 + 1) + 30;
//        printf("%d ", arr[i]);
//        sum = sum + arr[i];
//    }
//    printf("\nsum = %d", sum);
    
//    2、复制一个数组，即两个数组容量一样，把其中一个数组中的元素复制到另外一个数组中。
    
//    int arr[5] = {0};
//    int arr1[5] = {0};
//    for (int n = 0; n < 5; n++) {
//        arr[n] = n+1;
//        printf("%d ", arr[n]);
//    }
//    printf("\n");
//
//    for (int i = 0; i < 5; i++) {
//        arr1[i] = arr[i];
//        printf("%d ", arr[i]);
//    }
    
//    int arr[10] = {0};
//    int arr1[10] = {0};
//    for (int i = 0; i < 10; i++) {
//        arr[i] = arc4random()%(20 - 0 + 1) + 0;
//        printf("%d ", arr[i]);
//    }
//    printf("\n");
//    for (int j = 0; j < 10; j++) {
//        arr1[j] = arr[j];
//        printf("%d ", arr1[j]);
//    }
    
//    3、生成2个数组，每个数组都有10个元素，元素取值范围20-40之间，数组对应元素相加，放到另外一个数组中。
    
    
//    int a[10] = {0};
//    int b[10] = {0};
//    int sum[10] = {0};
//    for (int i = 0; i < 10; i++) {
//        a[i] = arc4random()%(40 - 20 + 1) + 20;
//        b[i] = arc4random()%(40 - 20 + 1) + 20;
//        printf("a[%d] = %d )
//    }
    
//    int a[10] = {0};
//    int b[10] = {0};
//    int sum[10] = {0};
//    for (int i =0; i < 10; i++) {
//        a[i] = arc4random()%(40 - 20 + 1) + 20;
//        b[i] = arc4random()%(40 - 20 + 1) + 20;
//        printf("a[%d] = %d ", i+1, a[i]);
//        printf("b[%d] = %d ", i+1, b[i]);
//        sum[i] = a[i] + b[i];
//        printf("sum[%d] = %d ", i+1, sum[i]);
//    }
    
    
    // 冒泡排序法:
    
//    int arr[4] = {22, 13, 8, 2};
//    
//    // i控制进行几轮比较
//    for (int i = 0; i < 4 - 1; i++) {
//        
//        // j控制每轮比较多少次
//        for (int j = 0; j < 4 - i - 1; j++) {
//            
//            //若当前元素大于后面的元素,交换两个变量
//            if (arr[j] > arr[j + 1]) {
//                
//                // 交换
//                int temp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = temp;
//            }
//        }
//    }
//    // 输出打印验证
//        for ( int i = 0; i < 4; i++) {
//            printf("arr[%d] = %d ", i, arr[i]);
//        }
    
    
    // 定义一个20个元素的数组,为每个元素赋值[20, 70]范围的数,并进行冒泡排序.
    
//    int arr[20] = {0};
//    
//    // 为每个元素赋值
//    for (int i = 0; i < 20; i++) {
//        arr[i] = arc4random()% ( 70 - 20 + 1) + 20;
//        printf("arr[%d] = %d ", i, arr[i]);
//    }
//    printf("\n排序后:");
//    
//    // 冒泡排序
//    for (int i = 0; i < 20 - 1; i++) {
//        for (int j = 0; j < 20 - i - 1; j++) {
//            if (arr[j] > arr[j + 1]) {
//                
//                // 交换
//                int temp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = temp;
//            }
//        }
//    }
//    
//    // 输出打印
//    for (int i = 0; i < 20; i++) {
//        printf("arr[%d] = %d ", i, arr[i]);
//    }
    
    
    
//    char str[10] = {'Q', 'i', 'n', 'g', 'C', 'h', 'u', 'n', 'e', 'r'};
    
    // 字符串 - 也是一维数组,系统会自动在后面添加结束符'\0',但我们需要多预留一个位置
//    char name[11] = "QingChuner";
    
    // 此种写法需要手动添加结束符'\0'
//    char name1[11] = {'Q', 'i', 'n', 'g', 'C', 'h', 'u', 'n', 'e', 'r', '\0'};
    
//    for (int i = 0; i < 10; i++) {
//        printf("%c", name[i]);
//    }
    
    // 有结束符的好处
//    printf("%s", name);
    
//    char a[] = "GeHeJun";
//    char b[] = "SunYunPu";
//    char c[] = "LiQianQian";
//    char d[] = "SunMingFa";
//    printf("%s\n%s\n%s\n%s", a, b, c, d);
    
//    char name1[] = "WangNing";
//    char name2[20] = {0};
    
    // 字符串拷贝
    // strcpy(str1,str2) - 功能将str2的内容拷贝到str1中
//    strcpy(name2, name1);
//    printf("%s\n", name2);
    
    // 字符串长度
//     len = strlen(name1) - 功能:计算name1的长度(不算结束符)结果返回到len中

    // 字符串拼接
    // strcat(name3, name1) - 功能:将name1的内容拼接到name3后面并将拼好的字符串存到name3中.
    //注意!!! name3要有足够的空间容下拼接后的字符串
//   char name3[20] = "Wb";
//    strcat(name3, name1);
//    printf("%s\n", name3);
    
//    char name4[] = "WN";
//    // 字符串比较
//    // int ret = strcmp(name1, name4) - 功能:比较name1和name4的大小(逐个字符比较ascii码值,遇到第一处不等的停止并返回差值,若全部相等返回0)
//    int ret = strcmp(name1, name4);
//    printf("%d\n", ret);
    
//    查找字符串中的空格数：
//    例如：“I love iOS, i want an iPhone6s”
//    6个空格
    
//    char str[] = "I love iOS, i want an iPhone6s";
//    int count = 0;
//    for (int i = 0; i < strlen(str); i++) {
//        if (' ' == str[i]) {
//            count++;
//        }
//    }
//    printf("%d", count);
    
//    将字符串倒转：
//    例如：“afjnpue”
//    转变成字符串“eupnjfa”
//    （注：是改变字符串本身，不是反向输出）
    
    char str[] = "afjnpue";
    long len = strlen(str);
    
    // 注意循环条件为len / 2
    for (int i = 0; i < len / 2 ; i++) {
        
        // 将前后两个元素互换
        char temp = str[i];
        
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
    printf("%s",str);

    
    
    
    
    return 0;
}
